
#ifndef _VERTICE_H

#define _VERTICE_H


#include <vector>
#include "Vector.h"

using namespace::std;

class Vertice
{
public:
    //Constructor
    Vertice();

    Vertice(double X, double Y, double Z);

    //Propiedades
    void setX(const double &X){dblX = X;}
    void setY(const double &Y){dblY = Y;}
    void setZ(const double &Z){dblZ = Z;}

    double &getX() {return dblX;}//esto cambia
    double &getY() {return dblY;}//esto cambia
    double &getZ() {return dblZ;}//esto cambia

	void setID(int id){intID = id;}
	int getID(){return intID;}

    friend bool operator <(const Vertice &p1, const Vertice &p2) {
        return (p1.dblX == p2.dblX ? (p1.dblY == p2.dblY ? (p1.dblZ == p2.dblZ ? false : p1.dblZ < p2.dblZ) : p1.dblY < p2.dblY) : p1.dblX < p2.dblX);
    }

    void setOneConVertice(unsigned int valor){vConexionesVertice.push_back(valor);}
    int getOneConVertice(unsigned int Nro){return vConexionesVertice[Nro];}

    void setOneConBorde(unsigned int valor){vConexionesBorde.push_back(valor);}
    int getOneConBorde(unsigned int Nro){return vConexionesBorde[Nro];}

    void setOneConCara(unsigned int valor){vConexionesCara.push_back(valor);}
    int getOneConCara(unsigned int Nro){return vConexionesCara[Nro];}

    void setOneNormalCara(Vector v){vVectoresNormales.push_back(v);}
    Vector getOneNormalCara(unsigned int Nro){return vVectoresNormales[Nro];}

    void setConexionesVertice(vector<int> ConVertice){vConexionesVertice = ConVertice;}
    vector<int> getConexionesVertice(){return vConexionesVertice;}

    void setConexionesBorde(vector<int> ConBorde){vConexionesBorde = ConBorde;}
    vector<int> getConexionesBorde(){return vConexionesBorde;}

    void setConexionesCara(vector<int> ConCara){vConexionesCara = ConCara;}
    vector<int> getConexionesCara(){return vConexionesCara;}

    void setNormalesCara(vector<Vector> vNormales){vVectoresNormales = vNormales;}
    vector<Vector> getNormalesCara(){return vVectoresNormales;}

    void setNroConexionesVertice(const unsigned int &valor){intNroConexionesVertice = valor;}
    unsigned int getNroConexionesVertice(){return intNroConexionesVertice;}

    void setNroConexionesBorde(const unsigned int &valor){intNroConexionesBorde = valor;}
    unsigned int getNroConexionesBorde(){return intNroConexionesBorde;}

    void setNroConexionesCara(const unsigned int &valor){intNroConexionesCara = valor;}
    unsigned int getNroConexionesCara(){return intNroConexionesCara;}

    void setNormalVertice(Vector vec){vNormal = vec;}
    Vector getNormalVertice(){return vNormal;}

    void Add1ConVertice();
    void Add1ConBorde();
    void Add1ConCara();
    void CalcularNormal();

private:
    //Atributos
    double dblX;
    double dblY;
    double dblZ;

    vector<int> vConexionesVertice;
    vector<int> vConexionesBorde;
    vector<int> vConexionesCara;
    vector<Vector> vVectoresNormales;
	
    Vector vNormal;

    unsigned int intNroConexionesVertice;
    unsigned int intNroConexionesBorde;
    unsigned int intNroConexionesCara;

	int intID;
};

#endif

